package com.atguigu.gmall.list;


import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;


/**
 * 1、引入 spring-boot-starter-data-elasticsearch
 *      凡是boot官方starter带 data的，都是由 spring-data 项目提供数据访问功能；
 *
 * 2、SpringBoot为这个场景自动配置了什么？ xxxxAutoConfiguration
 *     1)、ElasticsearchDataAutoConfiguration:
 *          @Import({BaseConfiguration.class, RestClientConfiguration.class, ReactiveRestClientConfiguration.class})
 *          BaseConfiguration：                              ElasticSearch数据的Mapping转化器
 *          RestClientConfiguration:(Rest请求对ES进行crud)：  ElasticsearchRestTemplate: 给ES发送请求进行CRUD的工具
 *          总结： 我们以后用 ElasticsearchRestTemplate 操作ES
 *     2)、ElasticsearchRepositoriesAutoConfiguration
 *          总结： 以后写一个JavaBean，用注解说这个JavaBean对应es哪个索引，
 *                开启了SpringData对ES的注解式CRUD；
 *
 *     3)、ElasticsearchRestClientAutoConfiguration：ES Rest客户端的自动配置
 *         1、导入的配置 @Import({RestClientBuilderConfiguration.class, RestHighLevelClientConfiguration.class, RestClientFallbackConfiguration.class})
 *         2、配置文件：ElasticsearchRestClientProperties（"spring.elasticsearch.rest"）
 *
 *    总结：
 *      1）、ElasticSearch有关的配置在：spring.elasticsearch.rest
 *      2）、SpringBoot默认开启了 SpringData 操作es
 *      3）、SpringBoot默认开启了 rest客户端 操作es；以后只需要用 ElasticsearchRestTemplate
 *
 * 3、使用SpringData操作ES
 *    1、准备JavaBean（es中要保存的东西）
 *    2、准备Dao接口；不用写实现，就可以CRUD
 *          public interface PersonDao extends CrudRepository<Person,Long>
 *    3、开启自动仓库扫描功能
 *          @EnableElasticsearchRepositories：
 *          SpringBoot启动的时候，会自动扫描 extends 了 CrudRepository 的所有接口（必须标注 @Repository），并创建操作es的代理对象
 *    效果：
 *    1）、所有的索引会自动创建
 *    2）、Dao接口自带 CrudRepository 的增删改查
 *    3）、Dao接口可以自定义起名，完成稍微复杂的带条件查询、删除、更新等功能
 *        方法起名指南：https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#repository-query-keywords
 *
 *
 *
 *
 */
@EnableElasticsearchRepositories //开启es的自动仓库功能
@SpringCloudApplication
public class ListMainApplication {

    public static void main(String[] args) {
        SpringApplication.run(ListMainApplication.class,args);
    }
}
